package com.ruoyi.sso.service.impl;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.sso.domain.SsoWxToken;
import com.ruoyi.sso.mapper.SsoWxTokenMapper;
import com.ruoyi.sso.service.ISsoWxTokenService;
import com.ruoyi.sso.util.CharUtil;

/**
 * tokenService业务层处理
 * 
 * @author zsj
 * @date 2020-01-07
 */
@Service
public class SsoWxTokenServiceImpl implements ISsoWxTokenService 
{
    @Autowired
    private SsoWxTokenMapper ssoWxTokenMapper;

    /**
     * 30天过期
     */
    private final static Long EXPIRE = 3600 * 24 * 30L;
    
    /**
     * 查询token
     * 
     * @param userId tokenID
     * @return token
     */
    @Override
    public SsoWxToken selectSsoWxTokenById(Long userId)
    {
        return ssoWxTokenMapper.selectSsoWxTokenById(userId);
    }

    /**
     * 查询token列表
     * 
     * @param ssoWxToken token
     * @return token
     */
    @Override
    public List<SsoWxToken> selectSsoWxTokenList(SsoWxToken ssoWxToken)
    {
        return ssoWxTokenMapper.selectSsoWxTokenList(ssoWxToken);
    }

    /**
     * 新增token
     * 
     * @param ssoWxToken token
     * @return 结果
     */
    @Override
    public int insertSsoWxToken(SsoWxToken ssoWxToken)
    {
        return ssoWxTokenMapper.insertSsoWxToken(ssoWxToken);
    }

    /**
     * 修改token
     * 
     * @param ssoWxToken token
     * @return 结果
     */
    @Override
    public int updateSsoWxToken(SsoWxToken ssoWxToken)
    {
        ssoWxToken.setUpdateTime(DateUtils.getNowDate());
        return ssoWxTokenMapper.updateSsoWxToken(ssoWxToken);
    }

    /**
     * 删除token对象
     * 
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    @Override
    public int deleteSsoWxTokenByIds(String ids)
    {
        return ssoWxTokenMapper.deleteSsoWxTokenByIds(Convert.toStrArray(ids));
    }

    /**
     * 删除token信息
     * 
     * @param userId tokenID
     * @return 结果
     */
    @Override
    public int deleteSsoWxTokenById(Long userId)
    {
        return ssoWxTokenMapper.deleteSsoWxTokenById(userId);
    }
    
    @Override
    public Map<String, Object> createToken(Long wxUserId){
        //生成一个token
        String token = CharUtil.getRandomString(32);
        //当前时间
        Date now = new Date();

        //过期时间
        Date expireTime = new Date(now.getTime() + EXPIRE * 1000);

        //判断是否生成过token
        SsoWxToken tokenEntity = queryByUserId(wxUserId);
        if (tokenEntity == null) {
            tokenEntity = new SsoWxToken();
            tokenEntity.setUserId(wxUserId);
            tokenEntity.setToken(token);
            tokenEntity.setUpdateTime(now);
            tokenEntity.setExpireTime(expireTime);

            //保存token
            insertSsoWxToken(tokenEntity);
        } else {
            tokenEntity.setToken(token);
            tokenEntity.setUpdateTime(now);
            tokenEntity.setExpireTime(expireTime);

            //更新token
            updateSsoWxToken(tokenEntity);
        }

        Map<String, Object> map = new HashMap<>();
        map.put("token", token);
        map.put("expire", EXPIRE);

        return map;
    }

	@Override
	public SsoWxToken queryByUserId(Long userId) {
		
		return ssoWxTokenMapper.queryByUserId(userId);
	}

	@Override
	public SsoWxToken queryByToken(String token) {
		
		return ssoWxTokenMapper.queryByToken(token);
	}
}
